class Solution
{
public:
    int findMaxLength(vector<int> &nums)
    {
        int n = nums.size();
        vector<int> sum(n, 0);
        int ret = 0;
        unordered_map<int, int> m; // 记录我们前缀和的下标
        m[0]=-1;//前缀和为0此时最左边的坐标就是0
        int prev=0;//
        //sum[i]代表是从【0,i】数组之和
        for(int i=0;i<n;i++)
        {   
            int cur=prev+(nums[i]==0?-1:nums[i]);
            if(m.find(cur)!=m.end()) 
            {
                ret=max(ret,i-m[cur]);
            }
            else
            {
                m[cur]=i;
            }
            prev=cur;
        }
        return ret;
    }
};